import request from '../../static/utils/request';
import PubSub from 'pubsub-js';
import moment from 'moment';

const appInstance =  getApp();

Page({

    /**
     * 页面的初始数据
     */
    data: {
        isPlay:false,//音乐状态
        musicId:'',
        song:{},    //歌曲详情
        recommendList:[],
        musicLink:'',
        currentTime:'00:00', //实时播放事件
        durationTime:'00:00', //总时长
        currentWidth:0,
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {
        //原生小程序中路由传参，对参数长度有限制，如果参数过长，会自动截取掉
        let musicId = options.musicId;
        this.setData({
            musicId
        });
        this.getMusicInfo(musicId);

        //判断页面音乐是否在播放
        if(appInstance.globalData.isMusicPlay && appInstance.globalData.musicId === musicId){
            //修改状态为true
            this.changePlayState(true);
        }

        //当用户从操作系统中控制音乐播放暂停
        //通过控制backgroundAudioManager监听
        //为了方便后面调用，将实例声明到this上,解决跨作用域问题
        this.backAudioManager = wx.getBackgroundAudioManager();
        this.backAudioManager.onPlay(()=>{
            //修改播放状态
            this.changePlayState(true);
            //修改全局播放状态
            // appInstance.globalData.isMusicPlay = true;
            appInstance.globalData.musicId = musicId;
        });
        this.backAudioManager.onPause(()=>{
            this.changePlayState(false);
        });
        this.backAudioManager.onStop(()=>{
            this.changePlayState(false);
        });
        this.backAudioManager.onEnded(()=>{
            // 自动切换下一首，并自动播放，还原进度条和实时事件
            PubSub.publish('switchType', 'next');
            this.setData({
                currentWidth:0,
                currentTime:'00:00',
            })
            //重新订阅消息
            PubSub.subscribe('musicId',(msg,musicId)=>{
                this.setData({
                    musicId
                })
                this.getMusicInfo(musicId);
                // 自动播放
                this.musicControl(true,musicId);
                
                PubSub.unsubscribe('musicId');
    
            })
        });
        //监听音乐播放
        this.backAudioManager.onTimeUpdate(()=>{
            // console.log(this.backAudioManager.currentTime);
            let currentTime = moment(this.backAudioManager.currentTime*1000).format('mm:ss');
            let currentWidth = this.backAudioManager.currentTime/this.backAudioManager.duration*500;
            this.setData({
                currentTime,
                currentWidth
            })
        })
    },
    //修改播放状态
    changePlayState(isPlay){
        this.setData({
            isPlay
        })
        appInstance.globalData.isMusicPlay = isPlay;
    },
    //点击切换播放暂停回调
    handleMusicPlay(){
        let isPlay = !this.data.isPlay;
    //     this.setData({
    //        isPlay
    //    });
    // 由于页面监听播放暂停后可设置isPlay，此处可省略
       let {musicId,musicLink} = this.data;
       this.musicControl(isPlay,musicId,musicLink);
    },
    //控制播放暂停
    async musicControl(isPlay,musicId,musicLink){
        
        if(isPlay){
            if(!musicLink){ //当前音乐暂停播放时无需请求，初始时为空 和 切换时不传musicLink 可请求
                //获取音乐链接
                let musicLinkData = await request('/song/url',{id:musicId});
                musicLink = musicLinkData.data[0].url;
                this.setData({
                    musicLink
                })
            }
            
            
            // console.log(musicLinkData);
            //创建音乐播放的实例
            this.backAudioManager.src = musicLink;
            this.backAudioManager.title = this.data.song.name;
            
        }else{
            this.backAudioManager.pause();
        }
    },
    handleSwitch(event){
        let type = event.currentTarget.id;
        //关闭当前播放的音乐
        this.backAudioManager.stop();

        //订阅来自recommend发布的musicId消息
        PubSub.subscribe('musicId',(msg,musicId)=>{
            this.setData({
                musicId
            })
            // console.log(musicId);
            //防止其多次订阅产生多个数据，
            // 同时不能放onload中，应为在页面加载时也会导致多次订阅
            // 取消订阅
            this.getMusicInfo(musicId);
            // 自动播放
            this.musicControl(true,musicId);
            
            PubSub.unsubscribe('musicId');

        })
        // 发布消息数据给reommended
        PubSub.publish('switchType',type);

    },
    //获取音乐详情
    async getMusicInfo(musicId){
        let songData = await request('/song/detail',{ids:musicId})
        let durationTime = moment(songData.songs[0].dt).format('mm:ss')
        this.setData({
            song:songData.songs[0],
            durationTime
        });
        //动态修改标题
        wx.setNavigationBarTitle({
            title:this.data.song.name
        })
    },
    getRecommendSong(){
        //使用getCurrentPage获取当前页面栈
        // 数组中第一个元素为首页，最后一个元素为当前页面。
        let currentPages =  getCurrentPages();
        let recommendList = currentPages[0].__data__.recommendList;
        this.setData({
            recommendList
        })
        // console.log(currentPages);
        // console.log(currentPages[0].__data__.recommendList);
    },
    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady: function () {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow: function () {

    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide: function () {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload: function () {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh: function () {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom: function () {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage: function () {

    }
})